import requests
import random
'''
       异常处理
'''
def catch_exception(origin_func):
    def wrapper(self, *args, **kwargs):
        for i in range(0, 3):
            try:
                u = origin_func(self, *args, **kwargs)
                return u
            except Exception:
                print('异常次数')
                if i == 2:
                    print('三次尝试异常，存入异常，管理员检查')
    return wrapper
'''
       异常处理
'''
def catch_exception_nos_wb(origin_func):
    def wrapper(*args, **kwargs):
        for i in range(0, 3):
            try:
                u = origin_func(*args, **kwargs)
                return u
            except Exception:
                print('异常次数')
                if i == 2:
                    print('三次尝试异常，存入异常，管理员检查')
    return wrapper
class Until:
    '''
    返回完整请求头
    '''
    def useragent(self):
        header = {'Connection': 'keep-alive',
                  'Cache-Control': 'max-age=0',
                  'Upgrade-Insecure-Requests': '1',
                  'User-Agent': self.random_useragent(),
                  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                  'Accept-Encoding': 'gzip, deflate, sdch',
                  'Accept-Language': 'zh-CN,zh;q=0.8',
                  }
        return header
    '''
    返回随机请求头
    '''
    def random_useragent(self):
        USER_AGENTS = [
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
            "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
            "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
            "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
            "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
            "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
            "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
            "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
            "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
            "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
            "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
        ]
        return random.choice(USER_AGENTS)
    '''
    去除字符串的   空格 和  \n
    '''
    def remove_space(self, str_s):
        return str_s.strip().replace('\n', '').replace("'", '')
    '''
    返回带有cookies并获取URL内容的文本
    '''
    @catch_exception
    def requestGet(self, cookies, url):
        if cookies is not '0':
            x = requests.session()
            for cookie in cookies:
                requests.utils.add_dict_to_cookiejar(x.cookies, {cookie['name']: cookie['value']})
            return x.get(url, timeout=20).text
        return requests.get(url, timeout=20).text
    '''
    返回带有cookies的requests
    '''
    @catch_exception
    def request_add_cookies(self, cookies):
        x = requests.session()
        if cookies == 0:
            return x
        for cookie in cookies:
            requests.utils.add_dict_to_cookiejar(x.cookies, {cookie['name']: cookie['value']})
        return x
if __name__ == '__main__':
    until = Until()
    text = until.requestGet(cookies='0', url='http://weixinsogou.com/weixin?type=2&ie=utf8&s_from=hotnews&query=%E5%9B%9B%E5%B7%9D%E8%8C%82%E5%8E%BF%E5%B1%B1%E4%BD%93%E5%9E%AE%E5%A1%8C')
    print(text)
